function ListNode(val) {
    this.val = val;
    this.next = null;
}
var lA1 = new ListNode(2);
var lA2 = new ListNode(4);
var lA3 = new ListNode(3);
lA1.next = lA2;
lA2.next = lA3;
var lB1 = new ListNode(5);
var lB2 = new ListNode(6);
var lB3 = new ListNode(4);
lB1.next = lB2;
lB2.next = lB3;

// var addTwoNumbers = function(l1, l2) {
//     function makeNum(node) {
//         var num = node.val;
//         if(makeNum.next) num = num * 10 + makeNum(node);
//         return num;
//     }
//     var num = makeNum(l1) + makeNum(l2);
//     var last = null;
//     while (num > 1){
//         var node = new ListNode(parseInt(num % 10));
//         if(last) last.next = node;
//         last = node;
//         num = num / 10
//     }
//     return last;
// };
var addTwoNumbers = function(l1, l2) {
    const result = p = {}
    while (l1 || l2) {
        // 求和
        const sum = (l1 && l1.val || 0) + (l2 && l2.val || 0) + (p.val || 0)
        // 取模
        const exceed = parseInt(sum / 10)

        l1 = l1 && l1.next
        l2 = l2 && l2.next

        // 取余
        p.val = sum % 10
        // 判断是否需要进位（新增链表节点）（试试不带 if 条件跑一遍就明白了）
        if (l1 || l2 || exceed) {
            p.next = { val: exceed }
        }

        p = p.next
    }
    return result
};
console.log(addTwoNumbers(lA1, lB1));